package Ecras;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import Controladores.CtlPesquisaComentarios;
import Listeners.ListenerSair;
import Utilities.EstabelecimentoCombo;
import Utilities.LinhaCombo;
import Utilities.MyTable;
import Utilities.PratoCombo;
import Utilities.Utilizador;

public class EcraPesquisaComentarios {

	private CtlPesquisaComentarios ctlPesquisaComentarios;
	private JFrame frame;
	private JTextField textutilizador;
	private JTextField textEstabelecimento;
	private JTextField textPrato;
	private JTextField textComentario;
	private JTextField textAvaliacao;
	private JCheckBox chckbxFotografia;
	private MyTable table;
	private Utilizador utilizador;
	private ArrayList<EstabelecimentoCombo> estabelecimentos = new ArrayList<EstabelecimentoCombo>();
	private ArrayList<PratoCombo> pratos = new ArrayList<PratoCombo>();
	private Integer idEstabelecimento = null;
	private Integer idPrato = null;

	/**
	 * Create the application.
	 */
	public EcraPesquisaComentarios(Utilizador utilizador) {
		this.utilizador = utilizador;
		ctlPesquisaComentarios = new CtlPesquisaComentarios(this);
		frame = new JFrame("Pesquisa de Comentarios");
		getEstabelecimentos();
		frame.setBounds(100, 100, 788, 491);
		frame.setResizable(false);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);

		JLabel lblUtilizador = new JLabel("Utilizador");
		lblUtilizador.setBounds(87, 14, 60, 14);
		frame.getContentPane().add(lblUtilizador);

		textutilizador = new JTextField();
		textutilizador.setBounds(153, 11, 108, 20);
		frame.getContentPane().add(textutilizador);
		textutilizador.setColumns(10);

		JLabel lblEstabelecimento = new JLabel("Estabelecimento");
		lblEstabelecimento.setBounds(272, 14, 128, 14);
		frame.getContentPane().add(lblEstabelecimento);

		textEstabelecimento = new JTextField();
		textEstabelecimento.setColumns(10);
		textEstabelecimento.setBounds(377, 11, 108, 20);
		frame.getContentPane().add(textEstabelecimento);

		JLabel lblAvaliacao = new JLabel("Avaliacao");
		lblAvaliacao.setBounds(502, 11, 76, 14);
		frame.getContentPane().add(lblAvaliacao);

		JLabel lblPrato = new JLabel("Prato");
		lblPrato.setBounds(87, 39, 46, 14);
		frame.getContentPane().add(lblPrato);

		textPrato = new JTextField();
		textPrato.setColumns(10);
		textPrato.setBounds(153, 36, 108, 20);
		frame.getContentPane().add(textPrato);

		JLabel lblComentario = new JLabel("Comentario");
		lblComentario.setBounds(272, 39, 86, 14);
		frame.getContentPane().add(lblComentario);

		textComentario = new JTextField();
		textComentario.setColumns(10);
		textComentario.setBounds(377, 36, 108, 20);
		frame.getContentPane().add(textComentario);

		chckbxFotografia = new JCheckBox("Fotografia");
		chckbxFotografia.setBounds(498, 35, 86, 23);
		frame.getContentPane().add(chckbxFotografia);

		JButton btnAplicar = new JButton("Aplicar");
		btnAplicar.setBounds(586, 35, 102, 23);
		frame.getContentPane().add(btnAplicar);
		btnAplicar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// controlador filtrar
				ctlPesquisaComentarios.filtrar(textutilizador.getText(),
						textEstabelecimento.getText(), textPrato.getText(),
						textComentario.getText(), textAvaliacao.getText(),
						chckbxFotografia.isSelected());
			}
		});

		JButton btnComentariosEAvaliacoes = new JButton(
				"Comentarios e Avaliacoes ");
		btnComentariosEAvaliacoes.setBounds(69, 428, 196, 23);
		btnComentariosEAvaliacoes.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String nome = null;
				String estabelecimento = null;
				String prato = null;
				String avaliacao = null;
				String comentario = null;
				if (table.getTable().getSelectedRow() >= 0) {
					nome = (String) table.getModel().getValueAt(
							table.getTable().getSelectedRow(), 0);
					estabelecimento = (String) table.getModel().getValueAt(
							table.getTable().getSelectedRow(), 1);
					prato = (String) table.getModel().getValueAt(
							table.getTable().getSelectedRow(), 2);
					avaliacao = (String) table.getModel().getValueAt(
							table.getTable().getSelectedRow(), 3);
					comentario = (String) table.getModel().getValueAt(
							table.getTable().getSelectedRow(), 4);
				}

				pratos = ctlPesquisaComentarios.getPratos(estabelecimento);
				getIdEstabelecimento(estabelecimento);
				getIdPratos(prato);
				ctlPesquisaComentarios.verComentariosEAvaliacoes(
						idEstabelecimento, idPrato, getUtilizador(), nome,
						estabelecimento, prato, avaliacao, comentario);

			}
		});
		frame.getContentPane().add(btnComentariosEAvaliacoes);

		JButton btnFotografias = new JButton("Fotografias");
		btnFotografias.setBounds(305, 428, 159, 23);
		frame.getContentPane().add(btnFotografias);
		btnFotografias.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String nome = null;
				String estabelecimento = null;
				String prato = null;
				ImageIcon fotografia = null;
				if (table.getTable().getSelectedRow() >= 0) {
					nome = (String) table.getModel().getValueAt(
							table.getTable().getSelectedRow(), 0);
					estabelecimento = (String) table.getModel().getValueAt(
							table.getTable().getSelectedRow(), 1);
					prato = (String) table.getModel().getValueAt(
							table.getTable().getSelectedRow(), 2);
					fotografia = (ImageIcon) table.getModel().getValueAt(
							table.getTable().getSelectedRow(), 5);
				}
				getIdEstabelecimento(estabelecimento);
				pratos = ctlPesquisaComentarios.getPratos(estabelecimento);
				if (prato != null) {
					getIdPratos(prato);
				}else{
					idPrato=null;
				}
				ctlPesquisaComentarios.verFotografias(nome, idEstabelecimento,
						estabelecimento, idPrato, prato, fotografia,
						getUtilizador().getEmail());

			}
		});

		JButton sair = new JButton("Sair");
		sair.setBounds(502, 428, 159, 23);
		frame.getContentPane().add(sair);

		sair.addActionListener(new ListenerSair());

		textAvaliacao = new JTextField();
		textAvaliacao.setColumns(10);
		textAvaliacao.setBounds(588, 8, 46, 20);

		this.table = new MyTable(frame);
		frame.setVisible(true);
		frame.getContentPane().add(textAvaliacao);
	}

	private void getEstabelecimentos() {
		estabelecimentos = ctlPesquisaComentarios.getEstabelecimentos();

	}

	private void getIdEstabelecimento(String estabelecimento) {
		if (estabelecimento != null) {
			for (EstabelecimentoCombo ec : estabelecimentos) {
				if (estabelecimento.equals(ec.getLabel())) {
					idEstabelecimento = ec.getId();
				}
			}
		}
	}

	private void getIdPratos(String prato) {
		if (prato != null) {
			for (PratoCombo pc : pratos) {
				if (pc.getLabel().equals(prato))
					idPrato = pc.getId();
			}
		}
	}

	public void display(ArrayList<LinhaCombo> tabela) {
		ArrayList<Object[]> displayTable = new ArrayList<Object[]>();
		Image newimg = null;
		ImageIcon resized = null;
		for (LinhaCombo linhaCombo : tabela) {

			if (linhaCombo.getFotografia() != null) {
				ImageIcon i = new ImageIcon(linhaCombo.getFotografia() + ".gif");
				int racioX = i.getIconWidth() / MyTable.IMG_X;
				int racioY = i.getIconHeight() / MyTable.IMG_Y;
				double maxRacio = Math.max(racioX, racioY);

				Image image = new ImageIcon(linhaCombo.getFotografia() + ".gif")
						.getImage();
				newimg = image.getScaledInstance(
						(int) (i.getIconWidth() / maxRacio),
						(int) (i.getIconHeight() / maxRacio),
						java.awt.Image.SCALE_SMOOTH);
			}
			if (newimg != null)
				resized = new ImageIcon(newimg);

			Object[] o = { linhaCombo.getUtilizador(),
					linhaCombo.getEstabelecimento(), linhaCombo.getPrato(),
					linhaCombo.getAvaliacao(), linhaCombo.getComentario(),
					resized };
			displayTable.add(o);
		}
		table.setData(displayTable);
	}

	public void filtrar() {
		ctlPesquisaComentarios.filtrar(textutilizador.getText(),
				textEstabelecimento.getText(), textPrato.getText(),
				textComentario.getText(), textAvaliacao.getText(),
				chckbxFotografia.isSelected());
	}

	public Utilizador getUtilizador() {
		return utilizador;
	}
}
